import echarts from 'echarts'
import { isJSON, overTimeTips, intervalTime, send } from '@/utils/websocket'

// 获取随机数
export function randomNum(m, n) {
  return (Math.random() * (n - m) + m).toFixed(1)
}

// 写入通道名称
export function writeName(_this, type, id, content) {
  for (const k in _this[`${type}Name`]) {
    if (k === `R_${id}`) {
      _this[`${type}Name`][`R_${id}`] = content
    }
  }
}

// 写入通道跳合闸记录
export function writeRecord(_this, type, id, content) {
  const typeCase = type.toLowerCase()
  var reg = /[a-zA-Z]*/g
  if (_this[`${typeCase}Index`] !== null) {
    // 通道合闸记录
    _this[`${type}Form`][`${type}OnList`][_this[`${typeCase}Index`]][`R_${id}`] = content.replace(reg, '')
    // 通道跳闸记录
    _this[`${type}Form`][`${type}OffList`][_this[`${typeCase}Index`]][`R_${id}`] = content.replace(reg, '')
    _this[`${type}Load`] = false // 取消加载中
    _this.toggleFlag = false
  }
}

// 写入IP使能并在使能关闭发送IP地址id
export function writeIpEnable(_this, type, id, content, list) {
  var itemStatus
  for (const item in _this[`${type}Lan`]) {
    var index = parseInt(item[5], 16)
    var enableNum = index - 5 // 直流-IP使能
    if (type === 'Ac') {
      enableNum = index - 5 // 交流-IP使能
    }
    if (item === `R_${id}`) {
      var value = Number(content)
      _this[`${type}Lan`][item] = value
      // 判断IP使能 关:0(灰色)  开:1(判断主板实时数据 lanStatus)
      if (value === 0) {
        itemStatus = 2 // 状态灰色
      } else if (value === 1) {
        if (_this.lanStatus.length < 1) {
          return
        }
        if (Number(_this.lanStatus[enableNum]) === 0) {
          itemStatus = 0 // 状态绿色
        } else {
          itemStatus = 1 // 状态红色
        }
      }
      _this.formMain.R_01020019[enableNum] = itemStatus
      // console.log('socket请求之后', _this.formMain.R_01020019[enableNum])
    }
  }
}
// 写入IP地址
export function writeIpAddress(_this, type, id, content) {
  // console.log(id, content)
  for (const k in _this[`${type}Ip`]) {
    if (k === `R_${id}`) {
      _this[`${type}Ip`][`R_${id}`] = content
      _this.writeIpEnableList = []
      _this.acwriteIpEnableList = []
      _this.dcwriteIpEnableList = []
    }
  }
}

// RSSI信号强度
export function initCharts(_this, xhqd) {
  _this.myChart = echarts.init(document.getElementById('myChart'))
  _this.myChart.setOption(
    {
      backgroundColor: '#ffffff',
      color: ['#F56C6C', '#F1BB4C', '#67C23A'],
      series: [
        {
          name: '业务指标',
          type: 'gauge',
          min: 1,
          max: 31,
          detail: {
            // 给显示数值加单位
            formatter: '{value}'
          },
          axisLine: {
            show: true,
            lineStyle: {
              width: 20,
              shadowBlur: 0,
              color: [
                [0.3, '#F56C6C'],
                [0.7, '#F1BB4C'],
                [1, '#67C23A']
              ]
            }
          },
          data: [
            {
              value: Number(xhqd),
              name: 'RSSI信号强度'
            }
          ],
          animationDurationUpdate: 20000,
          animationEasing: 'cubicOut'
        }
      ]
    },
    true
  )
  window.addEventListener('resize', function() {
    //   让我们图表调用resize方法
    _this.myChart.resize()
  })
}

// 卫星数量
export function initWxsl(_this, wxsl) {
  _this.wxslChart = echarts.init(document.getElementById('wxslChart'))
  _this.wxslChart.setOption({
    backgroundColor: '#fff',
    grid: {
      show: false,
      top: 10,
      bottom: 10
    },
    xAxis: [
      {
        gridIndex: 0,
        type: 'value',
        show: false,
        min: 0,
        max: 100,
        nameLocation: 'middle',
        nameGap: 5
      }
    ],
    yAxis: [
      {
        gridIndex: 0,
        min: 0,
        show: false,
        max: 100,
        nameLocation: 'middle',
        nameGap: 30
      }
    ],
    series: [
      {
        type: 'effectScatter',
        hoverAnimation: true,
        label: {
          normal: {
            show: true,
            formatter: '{b}',
            color: '#fff',
            textStyle: {
              fontSize: '20'
            }
          }
        },
        itemStyle: {
          normal: {
            color: '#00acea'
          }
        },
        data: [
          {
            name: '卫星数量' + '\n' + wxsl,
            value: [50, 50], // x y的位置
            symbolSize: 90, // 圆形大小
            label: {
              normal: {
                textStyle: {
                  fontSize: 18,
                  fontWeight: 800,
                  lineHeight: 22
                }
              }
            },
            itemStyle: {
              normal: {
                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                  {
                    offset: 0,
                    color: '#277aec'
                  },
                  {
                    offset: 1,
                    color: '#57c5ec'
                  }
                ]),
                opacity: 0.95
              }
            }
          }
        ]
      }
    ]
  })
  window.addEventListener('resize', function() {
    //   让我们图表调用resize方法
    _this.wxslChart.resize()
  })
}
// 获取主板实时数据
export function getZbMessage(_this, data) {
  if (isJSON(data)) {
    return
  }
  var lanStatus = []
  for (const k in _this.formMain) {
    data.split('<').forEach((item, index) => {
      switch (k.replace('R_', '')) {
        case item.split('>:')[0]:
          var value = item.split('>:')[1]
          // 通道LAN状态/光路状态
          if (item.split('>:')[0] === '01020019') {
            var value1 = value.trim().split('') // 切割为数组
            value = value1.reverse() // 翻转LAN状态数组
            lanStatus = value.slice(0, 10)
            // 分割lanStatus为两个数组-直流/交流
            // acNewArr = lanStatus.slice(6, 10) // 交流
            // dcNewArr = lanStatus.slice(0, 6) // 直流
            // console.log('lanStatus', lanStatus, 'acNewArr', acNewArr, 'dcNewArr', dcNewArr)
            _this.formMain.R_glzt = value.slice(10, 11)[0] // 存储光路状态
            _this.lanStatus = lanStatus // 存储LAN状态
            _this.writeLAN() // 写入LAN状态
          } else {
            // 清除单位 保留数字
            if (value.replace(/[^\d.]/g, '')) {
              value = value.replace(/[^\d.]/g, '')
            }
            _this.formMain[k] = value
          }
          break
        case 'xtwd':
          var wd = Number(_this.formMain.R_01020001)
          _this.formMain[k] = (wd + Number(randomNum(1.5, 2.5))).toFixed(2)
          break
        case 'fszt':
          var wd3 = Number(_this.formMain.R_01020001) // 内部温度
          var wd1 = Number(_this.formMain.R_00020003) // 内部风扇启动温度
          var wd2 = Number(_this.formMain.R_00020024) // 风扇停止温度差值
          // 内部温度 > 内部风扇启动温度 风扇状态开启
          if (wd3 > wd1) {
            _this.formMain[k] = true
          }
          // 内部温度 < 内部风扇启动温度 + 风扇停止温度差值 风扇状态关闭
          if (wd3 < wd1 + wd2) {
            _this.formMain[k] = false
          }
          break
        default:
      }
    })
  }
  initCharts(_this, _this.formMain.R_01050001) // RSSI信号强度
}

// 通道select数据
export function setOptions(_this, index, namer, type) {
  const arr = []
  for (var i = 0; i < index; i++) {
    arr.push({ value: i, label: `${namer}${Number(i) + 1}` })
  }
  _this[`${type}Form`][`${type}Options`] = arr
}

export function removeEmpty(arr) {
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] === '' || arr[i] == null || typeof arr[i] === 'undefined') {
      arr.splice(i, 1)
      i = i - 1
    }
  }
  return arr
}
// 转16进制
export function charCodeAt16(str) {
  return str.toString(16)
}
// 最近跳闸合闸记录回调函数
export function rendLately(gateType, type, start, end, _this) {
  // const arr = [_this[`${type}Form`][`${type}${gateType}Start`], _this[`${type}Form`][`${type}${gateType}End`]]
  const list = []
  for (let i = Number(start); i <= Number(end); i++) {
    let command_id = charCodeAt16(Number(i))
    if (Number(i) < 16) {
      command_id = `0${command_id}`
    }
    list.push({
      command_id: `020100${command_id}`,
      value: ''
    })
  }
  return list
}
// select 通道函数
export function tdChange(event, _this, type) {
  if (_this[`${type}Form`][`${type}Value`] === '') {
    return
  }
  const typeCase = type.toLowerCase()
  clearInterval(_this.intervalTimer) // 清除获取卫星数量定时器
  clearTimeout(_this.timer) // 清除遮罩
  clearTimeout(_this.tdTimer) // 清除切换通道定时器
  _this.ifOk = false
  // 并且发送ok指令允许执行
  _this.togglePage = true
  _this[`${typeCase}Index`] = event // 保存选中index
  _this[`${type}Load`] = true // 加载中
  // sendMassage(_this, type, 'On', _this.tdList) // 合闸记录
  // sendMassage(_this, type, 'Off', _this.tdList) // 跳闸记录
  for (const k in _this[`${type}Form`][`${type}OnList`][event]) {
    _this.tdList.push({
      command_id: k.replace('R_', ''),
      value: ''
    })
  }
  for (const k in _this[`${type}Form`][`${type}OffList`][event]) {
    _this.tdList.push({
      command_id: k.replace('R_', ''),
      value: ''
    })
  }
  // 发送数据
  send(_this, '01', _this.tdList)
  _this.tdTimer = setTimeout(() => {
    if (_this[`${type}Load`]) {
      _this[`${type}Load`] = false
      _this.togglePage = false
      _this.$message.error(overTimeTips)
    }
  }, intervalTime)
}

// 通道select 改变发送的数据调用此事件

export function sendMassage(_this, type, switchType) {
  console.log(type, switchType)
  console.log('currentIndex0', _this.DcForm.DcOnList[0])
  console.log('currentIndex1', _this.DcForm.DcOnList[1])
  console.log('currentIndex2', _this.DcForm.DcOnList[2])
  console.log('currentIndex3', _this.DcForm.DcOnList[3])
  const currentIndex = Number(_this[`${type}Form`][`${type}Value`])
  console.log(_this[`${type}Form`][`${type}${switchType}List`][currentIndex])
  for (const k in _this[`${type}Form`][`${type}${switchType}List`][currentIndex]) {
    console.log(k)
    // _this.tdList.push({
    //   command_id: k.replace('R_', ''),
    //   value: ''
    // })
  }
}
